#ifndef TETRIS_H
#define TETRIS_H

#include <QMainWindow>
#include<qpainter.h>
#include<QApplication>

const int BLOCK_SIZE=30;//单个方块单元的边长
const int MARGIN=20;//场景边距
const int AREA_ROW=24;//场景行数
const int AREA_COL=16;//场景列数

//方向
enum Direction
{
    UP,
    DOWN,
    LEFT,
    RIGHT,
    SPACE
};

//定义边界信息
struct Border
{
    int ubound;
    int dbound;
    int lbound;
    int rbound;
};

//坐标
struct block_point
{
    int pos_x;
    int pos_y;
};

namespace Ui { class Tetris; }

class Tetris : public QMainWindow
{
    Q_OBJECT

public:
    enum GameStatus{RUNNING,STOP,PAUSE};
    explicit Tetris(QWidget *parent=0);
    ~Tetris();

    void InitGame();//初始化
    void StartGame();//开始游戏

    void ResetBlock();//重置方块
    void CreatBlock(int block[4][4],int blcol_id);//产生方块
    void GetBorder(int block[4][4],Border &border);//计算边界


    virtual void paintEvent(QPaintEvent *event);


private:
    Ui::Tetris *ui;

private:
    int game_area[AREA_ROW][AREA_COL];//场景区域，1表示活动的方块，2表示稳定的方块，0表示空
    block_point block_pos;//当前方块坐标
    int cur_block[4][4];//当前方块形状
    Border cur_border;//当前方块边界；
    int next_block[4][4];//下一个方块形状
    int speed_ms;//下落时间间隔
    int refresh_ms;//刷新时间间隔
    int game_timer;//方块下落计时器
    int paint_timer;//渲染刷新计时器

    volatile GameStatus gameStatus=GameStatus::STOP;

};
#endif // TETRIS_H